package com.it.test;

import com.it.mapper.UserMapper;
import com.it.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/*
 * TODO MyBatis (1)、快速入门
 * 【说明】：mybatis是一款持久层框架、也就是操作数据库的框架、
 *         支持自定义SQL、存储过程及高级映射、MyBatis免除了几乎所有的JDBC代码及设置参数
 *         通过简单的XML配置文件或者注解形式来配置
 * 【使用】：
 *         方式一：基于 XML配置文件
 *           1、导入mybatis依赖、mysql依赖、详情查看pom.xml
 *           2、准备实体类、操作数据库的接口类
 *           3、在 resources 文件夹下创建 MyBatis 核心配置文件
 *                  配置数据库连接源信息、
 *                  扫描映射配置文件路径
 *                  导入外部文件
 *           4、在于Mapper同路径下创建 映射配置文件、
 *                  连接Mapper接口方法
 *                  配置编写查询数据库的 MySQL 语句
 *                  查询数据的返回格式
 *           5、创建 SqlSessionFactory、查询数据库
 * */
public class ssm_mybatis_01 {

    // 测试：查询数据库中的全部数据
    @Test
    public void test01() throws IOException {
        // 1、读取外部配置文件
        InputStream asStream = Resources.getResourceAsStream("mybatis-config.xml");

        // 2、创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(asStream);

        // 3、根据 SqlSessionFactory 创建会话 SqlSession（每次业务创建一个、用完释放）
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 4、获取接口的代理对象（通过代理技术）调用代理对象的方法，就查找 mapper接口方法
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        // 5、调用方法、查询数据库
        List<User> users = userMapper.findAll();
        for (User u : users) {
            System.out.println(u);
        }

        // 6、提交事务、释放资源
        sqlSession.commit(); // 提交事务 [DQL不需要,其他需要]
        sqlSession.close();
        asStream.close();
    }
}
